{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.linalg import expm\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we perform a continuous time quantum walk (CTQW) on a complete graph with four nodes (denoted as $K_4$). We will be following [this](https://www.nature.com/articles/ncomms11511) paper."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10abcfc50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "G = nx.complete_graph(4)\n",
    "nx.draw_networkx(G)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The spectrum of complete graphs is quite simple -- one eigenvalue equal to $N-1$ (where $N$ is the number of nodes) and the remaining equal to -1:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1. -1. -1.  3.]\n"
     ]
    }
   ],
   "source": [
    "A = nx.adjacency_matrix(G).toarray()\n",
    "eigvals, _ = np.linalg.eigh(A)\n",
    "print(eigvals)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For the CTQW the usual hamiltonian is the adjacency matrix $A$. We modify it slightly by adding the identity, i.e. we take $\\mathcal{H} = A + I$. This will reduce the number of gates we need to apply, since the eigenvectors with 0 eigenvalue will not acquire a phase."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "hamil = A + np.eye(4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It turns out that $K_n$ graphs are Hadamard diagonalizable, allowing us to write $\\mathcal{H} = Q \\Lambda Q^\\dagger$, where $Q = H \\otimes H$. Let's check that this works."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  0.,  0.,  0.],\n",
       "       [ 0.,  0.,  0.,  0.],\n",
       "       [ 0.,  0.,  0.,  0.],\n",
       "       [ 0.,  0.,  0.,  0.]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "had = np.sqrt(1/2) * np.array([[1, 1], [1, -1]])\n",
    "pauli_x = np.array([[0, 1], [1, 0]])\n",
    "Q = np.kron(had, had)\n",
    "Q.conj().T.dot(hamil).dot(Q)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The time evolution operator $e^{-iHt}$ is also diagonalized by the same transformation. In particular we have\n",
    "\n",
    "$$\n",
    "Q^\\dagger e^{-iHt}Q = \\begin{pmatrix} \n",
    "            e^{-i4t} & 0 & 0 & 0 \\\\\n",
    "            0 & 1 & 0 & 0 \\\\\n",
    "            0 & 0 & 1 & 0 \\\\\n",
    "            0 & 0 & 0 & 1\n",
    "           \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "Which is just a [CPHASE00](http://pyquil.readthedocs.io/en/latest/gates.html) gate with an angle of $-4t$. The circuit to simulate these is then extremely simple:\n",
    "\n",
    "![](circuit.png \"Circuit for $K_4$ CTQW\")\n",
    "\n",
    "(Taken from paper above, $\\gamma = 1$ in our case.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pyquil.quil as pq\n",
    "import pyquil.api as api\n",
    "from pyquil.gates import H, X, CPHASE00"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "qvm = api.QVMConnection()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def k_4_ctqw(t):\n",
    "    p = pq.Program()\n",
    "    \n",
    "    #   Change to diagonal basis\n",
    "    p.inst(H(0))\n",
    "    p.inst(H(1))\n",
    "    p.inst(X(0))\n",
    "    p.inst(X(1))\n",
    "    \n",
    "    #    Time evolve\n",
    "    p.inst(CPHASE00(-4*t, 0, 1))\n",
    "    \n",
    "    #   Change back to computational basis\n",
    "    p.inst(X(0))\n",
    "    p.inst(X(1))\n",
    "    p.inst(H(0))\n",
    "    p.inst(H(1))\n",
    "    \n",
    "    return p"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's compare the quantum walk with a classical random walk. The classical time evolution operator is $e^{-(\\mathcal{T} - I) t}$ where $\\mathcal{T}$ is the transition matrix of the graph.\n",
    "\n",
    "We choose as our initial condition $|\\psi(0)> = |0>$, that is the walker starts on the first node. Therefore, due to symmetry, the probability of occupation of all nodes besides $| 0 >$ is the same. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x10c204650>]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10b0aa490>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "T = A / np.sum(A, axis=0)\n",
    "time = np.linspace(0, 4, 40)\n",
    "quantum_probs = np.zeros((len(time), 4))\n",
    "classical_probs = np.zeros((len(time), 4))\n",
    "\n",
    "for i, t in enumerate(time):\n",
    "    p = k_4_ctqw(t)  \n",
    "    wvf = qvm.wavefunction(p)\n",
    "    vec = wvf.amplitudes\n",
    "    quantum_probs[i] = np.abs(vec)**2\n",
    "\n",
    "    classical_ev = expm((T-np.eye(4))*t)\n",
    "    classical_probs[i] = classical_ev[:, 0]    \n",
    "    \n",
    "f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=True)\n",
    "\n",
    "ax1.set_title(\"Quantum evolution\")\n",
    "ax1.set_ylabel('p')\n",
    "ax1.plot(time, quantum_probs[:, 0], label='Initial node')\n",
    "ax1.plot(time, quantum_probs[:, 1], label='Remaining nodes')\n",
    "ax1.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "\n",
    "ax2.set_title(\"Classical evolution\")\n",
    "ax2.set_xlabel('t')\n",
    "ax2.set_ylabel('p')\n",
    "ax2.plot(time, classical_probs[:, 0], label='Initial node')\n",
    "ax2.plot(time, classical_probs[:, 1], label='Remaining nodes')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As expected the quantum walk exhbits coherent oscillations whilst the classical walk converges to the stationary distribution $p_i = \\frac{d_i}{\\sum_j d_j} = \\frac{1}{4}$.\n",
    "\n",
    "We can readily generalize this scheme to any $K_{2^n}$ graphs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x10c3c4d50>]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10b097750>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def k_2n_ctqw(n, t):\n",
    "    p = pq.Program()\n",
    "    \n",
    "    #    Change to diagonal basis\n",
    "    for i in range(n):\n",
    "        p.inst(H(i))\n",
    "        p.inst(X(i))\n",
    "\n",
    "    #   Create and apply CPHASE00\n",
    "    big_cphase00 = np.diag(np.ones(2**n)) + 0j\n",
    "    big_cphase00[0, 0] = np.exp(-1j*4*t)\n",
    "    p.defgate(\"BIG-CPHASE00\", big_cphase00)     \n",
    "    args = tuple([\"BIG-CPHASE00\"] + list(range(n)))\n",
    "    p.inst(args)\n",
    "\n",
    "    #   Change back to computational basis\n",
    "    for i in range(n):\n",
    "        p.inst(X(i))\n",
    "        p.inst(H(i))\n",
    "    \n",
    "    return p\n",
    "\n",
    "def k_2n_crw(n, t):\n",
    "    G = nx.complete_graph(2**n)\n",
    "    A = nx.adjacency_matrix(G)\n",
    "    T = A / A.sum(axis=0)\n",
    "    classical_ev = expm((T-np.eye(2**n))*t)\n",
    "    \n",
    "    return classical_ev[:, 0]    \n",
    "\n",
    "time = np.linspace(0, 4, 40)\n",
    "quantum_probs = np.zeros((len(time), 8))\n",
    "classical_probs = np.zeros((len(time), 8))\n",
    "\n",
    "for i, t in enumerate(time):\n",
    "    p = k_2n_ctqw(3, t)  \n",
    "    wvf = qvm.wavefunction(p)\n",
    "    vec = wvf.amplitudes\n",
    "    quantum_probs[i] = np.abs(vec)**2\n",
    "    classical_probs[i] = k_2n_crw(3, t)  \n",
    "    \n",
    "f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=True)\n",
    "\n",
    "ax1.set_title(\"Quantum evolution\")\n",
    "ax1.set_ylabel('p')\n",
    "ax1.plot(time, quantum_probs[:, 0], label='Initial node')\n",
    "ax1.plot(time, quantum_probs[:, 1], label='Remaining nodes')\n",
    "ax1.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "\n",
    "ax2.set_title(\"Classical evolution\")\n",
    "ax2.set_xlabel('t')\n",
    "ax2.set_ylabel('p')\n",
    "ax2.plot(time, classical_probs[:, 0], label='Initial node')\n",
    "ax2.plot(time, classical_probs[:, 1], label='Remaining nodes')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
